<?php
/**
 * Permite asignar zonas de trabajo al personal operativo
 * @package simertweb 
 * @subpackage controllers  
 * @category Administración
 * @author Grecia Espinoza <mrcl2587@gmail.com>
 * @author Juan Maldonado  <jgmaldonadoj@gmail.com> 
 * @version 1.0 
 */
class Establecer_zonas extends CI_Controller {

    function __construct() {
        parent::__construct();
        $this->load->model('mzona');
        $this->load->model('mzona_trabajo');
        $this->load->model('mpersona');
        $this->load->model('mempleado');
        $this->load->model('mpersonal_operativo');
        $this->load->model('mrol');
        $this->load->model('mcontrolador_zona');
        $this->load->model('acceso');
    }

    /**
     * Muestra la interfaz para asignar zonas de trabajo
     */
    function index() {
        if ($this->acceso->sesion() == 1) {
            $array1 = $this->mpersonal_operativo->listar_personal();
            $array2 = $this->mzona->listar_zonas();
            $data2 = $this->mzona_trabajo->listarZonasTrabajo();
            $data['listas'] = array_merge(array_merge($array1, array_merge($array2)), array_merge($data2));
            $this->load->view('includes/menu_izquierdo');
            $this->load->view('includes/cabecera');
            $this->load->view('establecer_zonas', $data);
            $this->load->view('includes/footer');
        } else {
            $this->load->view('autenticacion');
        }
    }

    /**
     * Permite asignar zonas de trabajo al personal operativo
     */
    function establecer() {
        $this->form_validation->set_rules('personal', ' ', 'callback_validar_zonas_establecidas|callback_validar_maximo_zonas|callback_validar_zonas_repetidas');
        if ($this->form_validation->run() == TRUE) {
            $this->mzona_trabajo->establecerZona();
            $this->index();
        } else {
            $this->index();
        }
    }

    /**
     * Permite habilitar o inhabilitar zonas de trabajo ya asignadas
     */
    function desabilitar_zonas_trabajo() {
        $this->form_validation->set_rules('habilitado', 'Habilitado', 'required|callback_seleccionar_check');
        if ($this->form_validation->run() === TRUE) {
            $this->mzona_trabajo->habilitar_deshabilitar();
            $this->index();
        } else {
            $this->index();
        }
    }

    /**
     * Permite realizar nuevas asignaciones de zonas de trabajo
     */
    function nueva_asignacion() {
        if ($this->acceso->sesion() == 1) {
            $this->mzona_trabajo->vaciar_zonas_trabajo();
            $this->index();
        } else {
            $this->load->view('autenticacion');
        }
    }

    /**
     * Valida la selección de una zona de trabajo asignada
     * @return boolean
     */
    function seleccionar_check() {
        if (isset($_POST["habilitado"])) {
            return TRUE;
        } else {
            $this->form_validation->set_message('seleccionar_check', '<p style="color: red">Primero debe seleccionar un item</p>');
            return FALSE;
        }
    }

    /**
     * Valida que la zona asignada no se duplique
     * @return boolean
     */
    function validar_zonas_establecidas() {
        if ($this->mzona_trabajo->validar_asignacion($_POST['zona'], $_POST['personal'], $_POST['desde'], $_POST['hasta']) == TRUE) {
            return TRUE;
        } else {
            $this->form_validation->set_message('validar_zonas_establecidas', '<p style="color: red">La asignacion establecida ya existe</p>');
            return FALSE;
        }
    }

    /**
     * Valida que el máximo de zonas asignadas a un controlador sean 4
     * @return boolean
     */
    function validar_maximo_zonas() {
        if ($this->mzona_trabajo->validar_maximo($_POST['personal']) == TRUE) {
            return TRUE;
        } else {
            $this->form_validation->set_message('validar_maximo_zonas', '<p style="color: red">No se puede asignar más de 4 zonas a un controlador</p>');
            return FALSE;
        }
    }

    /**
     * Valida que la zona asignada este disponible
     * @return boolean
     */
    function validar_zonas_repetidas() {
        if ($this->mzona_trabajo->validar_repetidas($_POST['zona'], $_POST['personal'], $_POST['desde'], $_POST['hasta']) == TRUE) {
            return TRUE;
        } else {
            $this->form_validation->set_message('validar_zonas_repetidas', '<p style="color: red">La zona ya esta asignada, sólo debe habilitarla</p>');
            return FALSE;
        }
    }

}

?>
